package com.love.bitmap;

public class Bitmap {


    public int[] set;

    // n 个数字 ： 0 ~ n-1
    public Bitmap(int n){

        // a/b 如果结果想向上取整，可以写成：(a+b-1) / b
        //  为什么不是 (a + b) / b 呢？ 因 a = n * b 时，即原本就是整除，不会向上取整，除不尽才需要
        // 前提是 a 和 b 都是非负数
        set = new int[(n + 31) / 32];
    }

    // 这个 set[num/32] : 是因为 数字下标本来就是 0 开始的
    public void add(int num){
        set[num / 32] |= 1 << (num % 32);
    }

    public void remove(int num){
        set[num / 32] &= ~(1 << (num % 32));
    }

    public void reverse(int num){
        set[num / 32] ^= 1 << (num % 32);
    }

    public boolean contains(int num){
        return ((set[num / 32] >> (num % 32)) & 1) == 1;
    }



}
